/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pkgjeudestrategie;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Random;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 *
 * @author Admin
 */
public class Faction implements Serializable{
    String name;
    boolean isDead=false;
    Diplomatie diplomatie=new Diplomatie();
    Drapeau drapeau=new Drapeau();
    Recherche recherche;
    ArrayList<Territoire> listTerritoire=new ArrayList();
    public Faction(Territoire t,int nbPlayer){
        Name newName=new Name();
        recherche=new Recherche(nbPlayer);
        this.name="Faction "+(newName.getName().toUpperCase());
        //pour qu'une faction existe, elle dois necessairement avoir au moins 1 territoire
        listTerritoire.add(t);
    }
    public boolean getDrapeauRelocalisation(){
        if(drapeau.isRelocate()){
            drapeau.setRelocate(false);
            return true;
        }
        return false;
    }
    public Recherche getRecherche(){
        return recherche;
    }
    public void setDead(){
        isDead=true;
    }
    public boolean isDead(){
        return isDead;
    }
    public Drapeau getDrapeau(Territoire t){//drapeau.setSize(400,400);
        drapeau.setAName(t.getName());
        return drapeau;
    }
    public void atWarWith(Faction f){
        diplomatie.addNewFaction(f);
        diplomatie.changeStatus(f, -50,0);
        f.getRawDiplomatie().addNewFaction(this);
        f.getRawDiplomatie().changeStatus(this, -50,0);
    }
    public String getDiplomatie(Faction f){
        String s=diplomatie.statusToString(f);
        return  s;
    }
    public void removeTerritoire(Territoire t){
        int emplacement=0;
        int x=0;
        for(Territoire te:listTerritoire){
            if(te.id==t.id){
                emplacement=x;
            }
            x++;
        }
        listTerritoire.remove(emplacement);
    }
    public void didSomethingEthicallyWrong(int i){
        diplomatie.changeStatusToAll(i);
    }
    public Diplomatie getRawDiplomatie(){
        return diplomatie;
    }
    public boolean atWar(Faction f){
        if(diplomatie.atWar(f)){
            return true;
        }
        return false;
    }
    public boolean isTraite(Faction f){
        
        diplomatie.addNewFaction(f);
        if(diplomatie.isTraite(f)){
            return true;
        }
        return false;
    }
    public void getTraite(Faction f){
        diplomatie.changeStatus(f, 25,2);
        f.getRawDiplomatie().changeStatus(this, 25,2);
    }
    
    public void removeTraite(Faction f){
        diplomatie.changeStatus(f, 25,3);
        f.getRawDiplomatie().changeStatus(this, 25,3);
    }
    public boolean askForPeace(Faction f){
        boolean isPeace= diplomatie.askForPeace(f);
        if(isPeace){
            
            f.getRawDiplomatie().changeStatus(this, 0,1);
        }
        return isPeace;
    }
    public String getName(){
        return name;
    }
    public void addTerritoire(Territoire t){
        listTerritoire.add(t);
    }

 

    public void actualizePopulation(){
        for(Territoire t: listTerritoire){
            t.actualizePopulation(this,true);
        }
    }
    public ArrayList<Territoire> getTerritoireList(){

        return listTerritoire;
    }
           public boolean isProperty() {
               return false;
           }
           public boolean contains(Terrain te){
               for(Territoire t: listTerritoire){
                   if(te instanceof Territoire){
                       Territoire te2=(Territoire) te;
                       if(t==te2){
                          return true; 
                       }
                       
                   }
               }
               return false;
           }
    private String getNewName(){
        String s="";
        char c;
        int y;
Random rnd=new Random();
for(int i=0;i<3;i++){
    c='0';
while(c=='0'||c=='A'||c=='E'||c=='I'||c=='O'||c=='U'||c=='Y'){c= (char) (rnd.nextInt(26)+65);}
s=s+c;
y=rnd.nextInt(8);
switch(y){
    case 0:c=65;break;
    case 1:c=69;break;
    case 2:c=69;break;
    case 3:c=69;break;
    case 4:c=73;break;
    case 5:c=79;break;
    case 6:c=85;break;
    case 7:c=89;break;
}
s=s+c;
}
        return s;
        //65,69,73,79,85,89
    }

    public ArrayList<Territoire> getListTerritoire() {
        return listTerritoire;
    }

  public String [] nomTerritoire(){
   String[] temp=new String[listTerritoire.size()];
  for(int i=0;i<temp.length;i++){
  temp[i]=this.listTerritoire.get(i).getName();
  }
  return temp;
  
  
  }  
  public Territoire findTerritoire(String nomTerritoire){
 Territoire temporaire=null;
 for (Territoire temp: listTerritoire){
 if (temp.getName().equals(nomTerritoire)){
     temporaire=temp;
 
 }
 }
return temporaire;
 }

  
  
  
  
}
